'use client' import { useState, useEffect } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { toast } from 'sonner' import { updateContract } from '../actions/contract-actions' import { getContractById } from '../actions/data-actions' import { ProjectSelector } from './project-selector' import { VendorSelector } from './vendor-selector' import { ContractSelector } from './contract-selector' interface Project { id: number code: string name: string type: string } interface Vendor { id: number vendorName: string vendorCode: string | null status: string } interface Contract { id: number contractNo: string contractName: string status: string projectId: number vendorId: number projectCode: string | null projectName: string | null vendorName: string | null vendorCode: string | null } interface ContractEditFormProps { onContractUpdated?: (contract: { id: number; contractNo: string; contractName: string; status: string }) => void } export function ContractEditForm({ onContractUpdated }: ContractEditFormProps) { const [loading, setLoading] = useState(false) const [selectedContract, setSelectedContract] = useState() const [selectedProject, setSelectedProject] = useState() const [selectedVendor, setSelectedVendor] = useState() const [formData, setFormData] = useState({ contractName: '', status: 'TEST' }) // 계약 선택 시 데이터 로드 useEffect(() => { if (selectedContract) { loadContractData(selectedContract.id) } }, [selectedContract]) const loadContractData = async (contractId: number) => { try { const result = await getContractById(contractId) if (result.success) { const contract = result.data setFormData({ contractName: contract.contractName, status: contract.status }) // 프로젝트 정보 설정 if (contract.projectId && contract.projectCode) { setSelectedProject({ id: contract.projectId, code: contract.projectCode, name: contract.projectName || '', type: '' }) } // 벤더 정보 설정 if (contract.vendorId && contract.vendorName) { setSelectedVendor({ id: contract.vendorId, vendorName: contract.vendorName, vendorCode: contract.vendorCode, status: 'ACTIVE' }) } } else { toast.error(result.error) } } catch (error) { toast.error('계약 정보를 불러오는 중 오류가 발생했습니다.') } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!selectedContract) { toast.error('수정할 계약을 선택해주세요.') return } if (!selectedProject || !selectedVendor || !formData.contractName.trim()) { toast.error('모든 필수 항목을 입력해주세요.') return } setLoading(true) try { const result = await updateContract(selectedContract.id, { projectId: selectedProject.id, vendorId: selectedVendor.id, contractName: formData.contractName, status: formData.status }) if (result.success) { toast.success(result.message) onContractUpdated?.(result.data) } else { toast.error(result.error) } } catch (error) { toast.error('계약 수정 중 오류가 발생했습니다.') } finally { setLoading(false) } } const handleContractSelect = (contract: Contract) => { setSelectedContract(contract) // 폼 초기화 setSelectedProject(undefined) setSelectedVendor(undefined) setFormData({ contractName: '', status: 'TEST' }) } return ( 계약 수정 기존 계약의 정보를 수정합니다.
{selectedContract && ( <>
선택된 계약
[{selectedContract.contractNo}] {selectedContract.contractName}
setFormData(prev => ({ ...prev, contractName: e.target.value }))} placeholder="계약명을 입력하세요" />
)}
) }